package com.zjp.reflect;

import com.zjp.entity.User;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * @author: zjp
 * @date: 2023-12-02
 * @description: 测试获取类的方法
 */
public class Test4_GetMethod {
    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        Class<User> uClazz = User.class;

        Method[] allMethods = uClazz.getDeclaredMethods(); // 获取所有方法
        for (Method method : allMethods) {
            System.out.println(method.getName() + "-->" + method.getParameterCount() + "--> " + method.getReturnType());
        }

        Method hobby = uClazz.getDeclaredMethod("hobby"); // 获取指定方法
        System.out.println(hobby.getName() + "-->" + hobby.getParameterCount() + "--> " + hobby.getReturnType());

        // 调用方法
        User user = new User();
        hobby.setAccessible(true); // 放开访问权限
        Object returnValue = hobby.invoke(user); // 通过 Method.invoke(对象, 方法参数) 形式调用方法
        System.out.println("returnValue-> " + returnValue);
    }
}
